home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************/
- /*
- C de Cerca 2
- Funciones, parámetros y texto en el Mac
-
- Rafael Escoté - Enric Herrera
- BlauSoft S.L. para MacFormat España - 1996
-
- La descripción del código y la información sobre cómo preparar
- el entorno de programación y generar estos programas, está contenida
- en el ejemplar de MacFormat que los acompaña.
-
- */
- /*****************************************************************/
-
-
-
- /**************************************************************** */
- /* PROTOTIPOS DE LAS FUNCIONES QUE HEMOS CREADO */
- /* PARA NUESTRO PROGRAMA */
- /**************************************************************** */
- void main(void); /* Esta función NO puede tener otro nombre */
- void MF_InitToolbox (void);
- void MF_AbreMiVentana (void);
- void MF_EscribeTexto (short codigo);
- void MF_bucle_principal(void);
-
-
-
- /**************************************************************** */
- /* CONSTANTES Y VARIABLES GLOBALES */
- /* RELACIONADAS CON LA VENTANA QUE ABRIREMOS */
- /**************************************************************** */
- /* La ventana que abriremos será creada dinámicamente por medio de
- la función NewWindow() que nos devolverá un puntero a la estructura de
- la nueva ventana, Declaramos pues, una variable adecuada... */
-
- WindowPtr gMiVentana = nil;
-
-
-
- /*--------------------------------------------------------------------*/
- /* A PARTIR DE ESTE PUNTO, APARECE EL CODIGO DE LAS FUNCIONES CREADAS
- ESPECIFICAMENTE PARA ESTE PROGRAMA. */
- /*--------------------------------------------------------------------*/
-
-
-
- /**************************************************************** */
- /* main() */
- /**************************************************************** */
- /*
- Todos los programas en C poseen una función que debe llamarse main.
- Cuando un programa se pone en marcha, lo hace SIEMPRE ejecutando
- en primer lugar la función main().
- Es el punto de entrada a nuestra aplicación.
-
- Recibe: nada
- Que hace: Llama otras funciones que preparan la aplicación...
- Salida: void (nada)
- */
- void main (void)
- {
- /* Antes de hacer nada, debemos inicializar la Toolbox del Mac */
- /* Como sea que el procedimiento a seguir para inicializar la Toolbox */
- /* es casi siempre el mismo, hemos creado una función MF_InitToolbox()*/
- /* que contiene las llamadas estándar de inicialización */
-
- MF_InitToolbox();
-
- /* Ahora empleamos una función que se encargará de abrir una ventana */
- MF_AbreMiVentana();
-
- /* Una vez abierta la ventana, podemos escribir algo de texto en ella */
- MF_EscribeTexto(0);
-
- /* Y ya podemos entrar en el bucle principal, que se encargará de
- recoger e interpretar las acciones del usuario */
- MF_bucle_principal();
-
- /* Cuando el bucle principal haya terminado, será porque el usuario
- desea acabar el programa.
- Debemos liberar la memoria ocupada por nuestra ventana. */
- DisposeWindow(gMiVentana);
-
- /* Y ya está, al acabarse la función main(), el Sistema cerrará
- nuestra aplicación de forma automática */
-
- } /* Fin de main() y del programa */
-
-
-
- /**************************************************************** */
- /* MF_bucle_principal */
- /**************************************************************** */
- /*
- Recibe: nada
- Que hace: Entra en un bucle y espera que se produzca una acción
- Según cual sea esta, reacciona llamando una de las funciones que
- hemos creado en esta demo.
- Salida: nada
- */
- void MF_bucle_principal(void)
- {
- short contador = 1; /* declaramos e inicializamos una variable
- que nos servirá para contar las veces que
- ejecutaremos la función MF_EscribeTexto()
- */
-
- long dummy; /* Una variable long que la función Delay() requiere */
-
- /* Mientras contador sea menor o igual a 3 */
- while(contador <= 3)
- {
-
- while (Button() == 0)
- ; /* Nos paramos a esperar que sea pulsado el ratón
- Button() es una función que devuelve el valor 0 si el botón
- del ratón no está pulsado */
-
- MF_EscribeTexto(contador); /* OK. Han pulsado el botón
- Ejecutamos la función MF_EscribeTExto()
- pasandole el valor de contador.
- La primera vez será = 1, luego 2 etc... */
-
- Delay(30,&dummy); /* Delay() es una función del Mac que detiene
- todo proceso durante el tiempo indicado en
- su primer parámetro. Las unidades empleadas
- son 1/60" seg.
- Así pues, 30 equivale a medio segundo de espera */
-
- contador = contador+1;/* Ahora incrementamos el contador sumándole 1.*/
-
- } /* fin del bucle while(contador <= 3) */
-
- Delay(60,&dummy); /* Un poco más de espera (1 segundo en este caso) */
-
- } /* Fin de la función MF_bucle_principal() */
-
-
-
- /**************************************************************** */
- /* MF_InitToolbox */
- /**************************************************************** */
- /*
- Inicializa la Toolbox Macintosh. El orden de llamada a las diversas
- rutinas es significativo! No lo cambie.
-
- Recibe: nada
- Cambia: nada en la aplicación
- Salida: nada
- */
- void MF_InitToolbox (void)
- {
-
- InitGraf(&qd.thePort);
- InitFonts();
- FlushEvents(everyEvent,0);
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(0L);
- InitCursor();
-
- } /* Fin de MF_InitToolbox() */
-
-
-
- /**************************************************************** */
- /* MF_AbreMiVentana */
- /**************************************************************** */
- /*
- Abre la ventana (la única) de nuestro programa. Las funciones empleadas
- y el significado de los parámetros que utilizamos se comentarán en posteriores
- versiones de esta aplicación.
-
- Recibe: nada
- Que hace: Crea una ventana...
- Salida: void (nada)
- */
- void MF_AbreMiVentana(void)
- {
- /* Declaración e inicialización de una variable de tipo Rect */
- Rect miRectangulo = { 48, 8,108, 300 };
-
- gMiVentana = NewWindow( nil,
- &miRectangulo,
- "\pC de Cerca - 2",
- true,
- documentProc,
- (WindowPtr)-1L,
- false,
- nil);
-
- if(gMiVentana == nil)
- ExitToShell(); /* Si la creación de la ventana falla,
- posiblemente sea debido a falta de memoria libre
- Lo más aconsejable es salir de la aplicación */
-
- } /* Fin de MF_AbreMiVentana() */
-
-
-
- /****************************************************************/
- /* MF_EscribeTexto */
- /****************************************************************/
- /*
- Dibuja en nuestra ventana un texto.
-
- Recibe: Un valor (short) que se emplea en una expresión condicional
- de tipo switch/case, para determinar qué texto escribir.
- Cambia: Borra los contenidos de la ventana y escribe un texto.
- Salida: nada
- */
- void MF_EscribeTexto(short codigo)
- {
- SetPort(gMiVentana); /* Antes de dibujar o escribir nada, debemos */
- /* indicar al Sistema en que ventana deseamos */
- /* hacerlo */
-
- EraseRect(&gMiVentana->portRect); /* Borramos los contenidos */
- MoveTo(10,30); /* Y ajustamos la posición inicial */
- /* en la que vamos a escribir */
-
- /* Una expresión condicional del tipo switch...case */
- switch(codigo)
- {
- /* Según el valor del parámetro recibido (codigo) */
- /* se ejecutará una (y sólo una) de las siguientes opciones. */
- /* De hecho, se ejecuta el código comprendido entre las sentencias */
- /* case y break */
-
- case 0: /* Por ejemplo, si código = 0 */
- DrawString("\pPulse el botón del ratón..."); /* <-- se ejecuta esto */
- break; /* y el programa 'salta' hasta el final del switch */
- case 1:
- DrawString("\pSwitch-case nº 1. Pulse otra vez...");
- break;
- case 2:
- DrawString("\pSwitch-case nº 2. Pulse una vez más...");
- break;
- case 3:
- DrawString("\pSwitch-case nº 3. Esta ha sido la última...");
- break;
- default:
- DrawString("\pMacFormat. C de Cerca nº 2");
- break;
-
- } /* Fin de switch(codigo) */
-
- }/* Fin de MF_EscribeTexto() */